package com.csust.automaticteach.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.csust.automaticteach.model.dto.generateexam.AddGenerateExamForAiRequest;
import com.csust.automaticteach.model.dto.generateexam.AddGenerateExamRequest;
import com.csust.automaticteach.model.dto.generateexam.GenerateExamQueryDTO;
import com.csust.automaticteach.model.entity.Exercises;
import com.csust.automaticteach.model.entity.GenerateExam;
import com.baomidou.mybatisplus.extension.service.IService;
import com.csust.automaticteach.model.entity.GenerateTeach;
import com.csust.automaticteach.model.entity.User;
import com.csust.automaticteach.model.vo.generateexam.GenerateExamPageVO;
import com.csust.automaticteach.model.vo.generateexam.GenerateExamVO;
import com.csust.automaticteach.model.vo.generateteach.GenerateTeachVO;
import com.csust.automaticteach.model.vo.generateteach.UploadReturnVO;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
* @author 钰玟
* @description 针对表【t_generate_exam(测试生成)】的数据库操作Service
* @createDate 2025-07-07 19:24:32
*/
public interface GenerateExamService extends IService<GenerateExam> {

    /**
     * 上传参考文件
     * @param file 参考文件
     * @param loginUser 登录用户
     * @return
     */
    UploadReturnVO uploadReferenceFile(MultipartFile file, User loginUser);

    /**
     * 添加 生成测试 同步  重构后
     * @param addGenerateExamRequest 添加参数
     * @param user 用户
     * @return
     */
    List<Exercises> addGenerateExamSynRefactoring(AddGenerateExamRequest addGenerateExamRequest, User user);


    /**
     * 添加 生成测试 同步
     * @param addGenerateExamRequest 添加参数
     * @param user 用户
     * @return
     */
    List<GenerateExamVO> addGenerateExamSyn(AddGenerateExamRequest addGenerateExamRequest, User user);

    /**
     * * 添加 生成测试 异步
     * @param addGenerateExamRequest 添加参数
     * @param user 用户
     * @return
     */
    List<GenerateExamVO> addGenerateExamAsy(AddGenerateExamRequest addGenerateExamRequest, User user);

    /**
     * 获取查询条件
     * @param generateExamQueryDTO 查询参数
     * @return 查询条件
     */
    QueryWrapper<GenerateExam> getGenerateExamQueryWrapper(GenerateExamQueryDTO generateExamQueryDTO);

    /**
     * 获取生成测试列表
     * @param records 生成测试列表
     * @return 生成测试列表
     */
    List<GenerateExamPageVO> getGenerateExamVOList(List<GenerateExam> records);


    /**
     * 获取生成测试视图对象
     * @param generateExam 实体类
     * @return 视图
     */
    GenerateExamPageVO getGenerateExamPageVO(GenerateExam generateExam);


    /**
     * 获取生成测试视图对象
     * @param generateExam 实体类
     * @return 视图
     */
    List<GenerateExamVO> getGenerateExamVO(GenerateExam generateExam);

    AddGenerateExamForAiRequest getReferenceByRequest(AddGenerateExamRequest addGenerateExamRequest);
}
